/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador.Service.Ventas;

import Controlador.Bean.Log.Log;
import Controlador.Bean.Ventas.NotaCredito;
import Controlador.Bean.Ventas.NotaCreditoBusqueda;
import Data.config.SessionFac;
import gui.General.Main;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.session.SqlSession;

/**
 *
 * @author Luis Enrique
 */
public class ServicioNotaCredito {
    
    java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    Date fecha= new Date();
    String f=sdf.format(fecha);
    
    private ServicioNotaCredito() {};
    
    static private ServicioNotaCredito servicioNotaCredito=null; 
		   
    public static ServicioNotaCredito getInstance(){    
        if(servicioNotaCredito==null) servicioNotaCredito= new ServicioNotaCredito();
        return servicioNotaCredito;
    }   
      
    //INICIO NOTA CREDITO
    
    public String getCodNotaCredito(){
        String codigo;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            codigo = sqlsesion.selectOne("Data.Ventas.ServicioNotaCredito.getCodNotaCredito");			
            sqlsesion.close();
        }
        if(codigo!=null){
            int cod= Integer.parseInt(codigo.substring(3))+1;
            String defecto= "000000";
            String temp= defecto.substring(0, defecto.length()-String.valueOf(cod).length()).concat(String.valueOf(cod));
            return codigo.substring(0,3).concat(temp);
        }
        else
             return ("NCR000001");
    }
    
    public synchronized void registrarNotaCredito(NotaCredito nc){
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            sqlsesion.insert("Data.Ventas.ServicioNotaCredito.insertNotaCredito",nc);
            sqlsesion.commit();
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTDEVLC","Registrar Nota de Crédito",f);
        }
    }
    
    public NotaCreditoBusqueda getNotaCredito(String codigo){
        NotaCreditoBusqueda notaCred;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            notaCred = sqlsesion.selectOne("Data.Ventas.ServicioNotaCredito.getNotaCredito",codigo);			
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTDEVLC","Seleccionar Nota de Crédito",f);
        }
        return notaCred;
    }
    
    public ArrayList<NotaCreditoBusqueda> seleccionarNCs (NotaCreditoBusqueda ncBusqueda){
        ArrayList<NotaCreditoBusqueda> ncs;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            List<NotaCreditoBusqueda> temp = (List)sqlsesion.selectList("Data.Ventas.ServicioNotaCredito.getNCs",ncBusqueda);			
            ncs = new ArrayList(temp);
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTDEVLC","Seleccionar Nota de Crédito",f);
        }
        return ncs;
    }    
    
    public void actualizarNCEstado (String codigo){
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            sqlsesion.update("Data.Ventas.ServicioNotaCredito.actualizarNCEstado",codigo);
            sqlsesion.commit();
            sqlsesion.close();
        }
    }  
    
}
